iT邦幫忙

2026 iThome 鐵人賽

DAY 24
1

day24_title

前言

我們一路從開發到 dokcer 今天我們要討論關於 bun 在 CI/CD 上的整合了
bun 效能如此優良,過往用 npm 打包整個 CI 流程跑得非常之久,現在我們有 bun
基本上可以大幅縮短團隊的部署時間,讓產品無形中迭代的更快速
那我們開始吧

基本設置

官方推薦使用 oven-sh/setup-bun 這個 Action 來安裝 bun,這是個最穩定的做法
我們來開始當 yaml 工程師吧!

我們就拿一個簡單的 bun 專案做以下的事情即可

我們在工作目錄建立 .github/workflows/bun-ci.yaml

範例

name: "我們的 bun ci"

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: [ubuntu-latest]
    name: "第一個 bun ci"
    steps:
      - name: "checkout code"
        uses: "actions/checkout@v4"

      - name: "安裝 bun(跟我本機同樣版本)"
        uses: oven-sh/setup-bun@v2
        with:
          bun-version: "1.3.14"

      - name: "裝個依賴"
        run: "bun install"

      - name: "我們隨便弄個測試跑跑看"
        run: "bun test"

與 nodejs 很像不過我們這裡用 bun 官方提供的 oven-sh/setup-bun@v2
那我這裡 bun-version 選擇 1.3.14 存粹是因為我本機是用這個版本
讀者可以依照自己喜好改這個版本

為了跑 bun test 可以順利我們建個簡單的測試(index.test.ts)

import { describe, it, expect } from 'bun:test';

describe('這是測試', () => {
  it('起手式', () => {
    expect(true).toBe(true);
  })
})

我們接下來把自己的 code push 到 github 上面

git init
git add .
git commit -m 'init'
git remote origin add <你的 repo>
git branch -M main
git push origin main

我們這裡看看結果

github_action結果
github_action結果2

一般範例

接下來這邊我們會走正常 CI 常做的事情

  1. Lint
  2. 測試
  3. 建置

我們一樣可以建置一個 .github/workflows/ci.yaml

name: "ci"

on:
  push:
    branches: ["main", "dev"]
  pull_request:
    branches: ["main"]

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - name: "checkout code"
        uses: "actions/checkout@v4"

      - name: "安裝 bun"
        uses: oven-sh/setup-bun@v2
        with:
          bun-version: "1.3.14"

      - name: "Cache 依賴"
        uses: "actions/cache@v4"
        with:
          path: "~/.bun/install/cache"
          key: ${{ runner.os }}-bun-${{ hashFiles('bun-lock') }}
          restore-keys:
            ${{ runner.os }}-bun-

      - name: "安裝依賴"
        run: bun install --frozen-lockfile

      - name: "跑 Linter"
        run: "bun run lint"

      - name: "跑測試"
        run: "bun test"

      - name: "build 專案"
        run: "bun run build"

大致的流程如下

CI 流程範例
以上是簡單地流成,通常專案有裝 eslint 或是 oxlint 通常會跑 lint 沒有的話可以移除 bun run lint 那段

結論

到這邊我們已經把 bun 在 GitHub Actions 上的基本應用跑過一輪了,
從最簡單的安裝、測試,到加上 Cache 依賴、Lint、Build 的完整 pipeline,
應該可以感受到 bun 在速度上帶來的優勢——尤其是 bun install 那個裝依賴的速度,
跟過往用 npm 動輒要等上老半天比起來,真的是差蠻多的。

不過這也引出一個問題,打包完後東西要放哪邊,這在我們下一篇會會介紹到
我們專案如果是用 Docker 包起來的,那要怎麼推上去?

想要知道,那我們下篇見


上一篇
部署實戰:把 Bun 應用容器化,推上 Docker
系列文
不只是快 —— Bun 30 天:從底層架構、全套工具鏈到生產部署24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言